
# 可变参数
"""
说明 ：
    1.参数的数量是可以发生变化的，
    2. 定义可变参数时有两种方式 ：
        1）: 列表形式的可变参数 ，在参数名前加一个* ，接受进来的参数值放在一个元组内
        eg : print(self, *args, sep=' ', end='\n', file=None): 这里的*args就是可变参数 。
        可以以位置参数参数传递，也可以以元组或列表形式传递，在它们前面加上一个*
        2): 字典形式的可变参数 ，在参数名前面加两个** ,接受进行的参数值放在一个字典中 。
        eg : quit(*args, **kwargs) ,这里的**kwargs就是字典的可变参数 。
        以关键字参数传递 ，也可以以字典形式传递，在字典前面加上** 。
"""


# 需求
def add(x,y,*args):
    print("args:",args)
    z = x + y + sum(args)
    return z

print(add(3,4))
print(add(3,4,5))
print(add(3,4,5,6))
print(add(3,4,5,6,7,8,9,34))            # 以位置参数的形式传递
# print(add(3,4,[5,6,7,8,9,34]))          # 将列表当成一个元素传入，这不是期望的

print(add(3,4,*[5,6,7,8,9,34]))         # 将列表里的元素传入可变参数
print(add(3,4,*(5,6,7,8,9,34)))         # 将元组里的元素传入可变参数


# 案例 ： 实现一个加法函数，可以接受任意个数量的值相加
def add1(**kwargs):
    print("kwargs:",kwargs)

print(add1(x=3,y=4,z=5))
print(add1(x=3,y=4,z=5,i=7))            # 以关键字参数传递
print(add1(**{'a':30,'b':40}))          # 以字典形式传递。